﻿Public Class clsAporte
    Private Codigo As Integer
    Private Nombre As String
    Private Valor As Double
    Private Legajo As Integer

    Public Property pCodigo() As Integer
        Get
            Return Codigo
        End Get
        Set(ByVal value As Integer)
            Codigo = value
        End Set
    End Property

    Public Property pLegajo() As Integer
        Get
            Return Legajo
        End Get
        Set(ByVal value As Integer)
            Legajo = value
        End Set
    End Property

    Public Property pNombre() As String
        Get
            Return Nombre
        End Get
        Set(ByVal value As String)
            Nombre = value
        End Set
    End Property

    Public Property pValor() As Double
        Get
            Return Valor
        End Get
        Set(ByVal value As Double)
            Valor = value
        End Set
    End Property

    'la siguiete propiedad es para los mensajes de error
    Private MsgAporte As String
    Public Property pMsgAporte() As String
        Get
            Return MsgAporte
        End Get
        Set(ByVal value As String)
            MsgAporte = value
        End Set
    End Property


    Private dbConexion As clsConexion

    Public Sub New()
        dbConexion = New clsConexion
    End Sub

    Public Enum TipoQuery
        InfoTodo = 0
        InfoIndividual = 1
    End Enum

    Public Enum VerifExistType
        Codigo = 0
        Legajo = 1
        Ambos = 2
    End Enum

    Public dbAporDataRow As DataRow
    Public dbAporDataSet As DataSet

    Public Function fn_EjecutarQuery(ByVal Tipo As TipoQuery) As Boolean
        Try
            Dim EjecutarQuery As Boolean = False
            Dim SqlQuery As String
            If dbConexion.fn_abrir Then
                Select Case Tipo
                    Case TipoQuery.InfoIndividual
                        SqlQuery = "SELECT * FROM Aportes " & _
                                   "WHERE  Codigo = @Codigo AND Legajo = @Legajo"

                        dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Codigo", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Codigo").Value = pCodigo

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Nombre", Data.SqlDbType.VarChar))
                        dbConexion.dbcommand.Parameters("@Nombre").Value = pNombre

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Valor", Data.SqlDbType.Float))
                        dbConexion.dbcommand.Parameters("@Valor").Value = pValor

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Legajo").Value = pLegajo

                        dbConexion.dbdataadapter = New SqlClient.SqlDataAdapter(dbConexion.dbcommand)
                        dbConexion.dbdataset = New DataSet
                        dbConexion.dbdataadapter.Fill(dbConexion.dbdataset, "Aportes")
                        If dbConexion.dbdataset.Tables.Count > 0 Then
                            EjecutarQuery = True
                            dbAporDataRow = dbConexion.dbdataset.Tables("Aportes").Rows(0)
                            dbConexion.dbdataadapter.Dispose()
                            dbConexion.dbdataset.Dispose()
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgAporte = "Error al obtener la información."
                        End If
                    Case TipoQuery.InfoTodo
                        SqlQuery = "SELECT * FROM Aportes WHERE Legajo = @Legajo"
                        dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Legajo").Value = pLegajo

                        dbConexion.dbdataadapter = New SqlClient.SqlDataAdapter(dbConexion.dbcommand)
                        dbConexion.dbdataadapter.Fill(dbConexion.dbdataset, "Aportes")
                        If dbConexion.dbdataset.Tables.Count > 0 Then
                            EjecutarQuery = True
                            dbAporDataSet = dbConexion.dbdataset.Copy()
                            dbConexion.dbdataadapter.Dispose()
                            dbConexion.dbdataset.Dispose()
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgAporte = "Error al obtener la información."
                        End If
                End Select
            Else
                MsgAporte = "No se pudo establecer la conexión con la base de datos."
            End If
            Return (EjecutarQuery)
        Catch ex As Exception
            MsgAporte = "Ocurrio un problema al ejecutar la consulta." & vbCrLf & ex.Message
            Return (False)
        End Try
    End Function

    Public Function fn_ValidarDatos(ByVal Operacion As String) As Boolean
        Select Case Operacion
            Case "Add", "Upd", "Del"
                If Trim(Codigo) = 0 Then
                    MsgAporte = "Debe proporcionar el Codigo"
                    Return (False)
                End If

                If Trim(Nombre) = "" Then
                    MsgAporte = "Debe proporcionar el Nombre del Aporte"
                    Return (False)
                End If

                If Trim(Valor) = 0 Then
                    MsgAporte = "Debe proporcionar el Valor"
                    Return (False)
                End If
        End Select
        Return (True)
    End Function

    Public Function fn_AddAporte() As Boolean
        Try
            Dim EjecucionOk As Boolean = False
            Dim SqlQuery As String

            If fn_ValidarDatos("Add") Then
                If dbConexion.fn_abrir Then
                    SqlQuery = " insert into Aportes(Codigo,Nombre,Valor,Legajo) " & _
                               " values(@Codigo,@Nombre,@Valor,@Legajo) "
                    dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                    With dbConexion.dbcommand
                        .CommandType = CommandType.Text
                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Codigo", Data.SqlDbType.Int))
                        .Parameters("@Codigo").Value = pCodigo()

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Nombre", Data.SqlDbType.VarChar))
                        .Parameters("@Nombre").Value = pNombre

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Valor", Data.SqlDbType.Float))
                        .Parameters("@Valor").Value = pValor

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        .Parameters("@Legajo").Value = pLegajo

                        If .ExecuteNonQuery() > 0 Then
                            EjecucionOk = True
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgAporte = "Se obtuvo errores al agregar el Aporte."
                            EjecucionOk = False
                        End If
                    End With
                Else
                    EjecucionOk = False
                End If
            Else
                EjecucionOk = False
            End If
            Return (EjecucionOk)
        Catch ex As Exception
            MsgAporte = "Error al agregar el Aporte." & vbCrLf & ex.Message
            If dbConexion.dbconnection.State = ConnectionState.Open Then dbConexion.su_cerrar()
            Return (False)
        End Try
    End Function
    Public Function fn_DelAporte() As Boolean
        Try
            Dim EjecucionOk As Boolean = False
            Dim SqlQuery As String
            If fn_ValidarDatos("Del") Then
                If dbConexion.fn_abrir Then
                    SqlQuery = " delete from  Aportes " & _
                               " where   Codigo=@Codigo AND Legajo=@Legajo"
                    dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                    With dbConexion.dbcommand
                        .CommandType = CommandType.Text

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Codigo", Data.SqlDbType.Int))
                        .Parameters("@Codigo").Value = pCodigo

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        .Parameters("@Legajo").Value = pLegajo

                        If .ExecuteNonQuery() > 0 Then
                            EjecucionOk = True
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgAporte = "Se obtuvo errores al eliminar el Aporte"
                            EjecucionOk = False
                        End If
                    End With
                Else
                    EjecucionOk = False
                End If
            Else
                EjecucionOk = False
            End If
            Return (EjecucionOk)
        Catch ex As Exception
            MsgAporte = "Error al agregar el Aporte." & vbCrLf & ex.Message
            If dbConexion.dbconnection.State = ConnectionState.Open Then dbConexion.su_cerrar()
            Return (False)
        End Try
    End Function

    Public Function fn_UpdAporte() As Boolean
        Try
            Dim EjecucionOk As Boolean = False
            Dim SqlQuery As String
            If fn_ValidarDatos("Upd") Then
                If dbConexion.fn_abrir Then
                    SqlQuery = " update Aportes" & _
                               " set Nombre = @Nombre, Valor= @Valor" & _
                                " where Codigo= @Codigo AND Legajo= @Legajo "
                    dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                    With dbConexion.dbcommand
                        .CommandType = CommandType.Text
                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Codigo", Data.SqlDbType.Int))
                        .Parameters("@Codigo").Value = pCodigo()

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Nombre", Data.SqlDbType.VarChar))
                        .Parameters("@Nombre").Value = pNombre

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Valor", Data.SqlDbType.Float))
                        .Parameters("@Valor").Value = pValor

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Valor", Data.SqlDbType.Int))
                        .Parameters("@Legajo").Value = pLegajo

                        If .ExecuteNonQuery() > 0 Then
                            EjecucionOk = True
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgAporte = "Se obtuvo errores al modificar el Aporte."
                            EjecucionOk = False
                        End If
                    End With
                Else
                    EjecucionOk = False
                End If
            Else
                EjecucionOk = False
            End If
            Return (EjecucionOk)
        Catch ex As Exception
            MsgAporte = "Error al agregar el Aporte." & vbCrLf & ex.Message
            If dbConexion.dbconnection.State = ConnectionState.Open Then dbConexion.su_cerrar()
            Return (False)
        End Try
    End Function

    Public Function fn_ExisteAporte(ByVal TipoVerificacion As VerifExistType) As Boolean
        Try
            Dim Existe As Boolean = False
            Dim SqlQuery As String
            If dbConexion.fn_abrir Then

                Select Case TipoVerificacion
                    Case VerifExistType.Ambos
                        SqlQuery = " select * from Aportes " & _
                                   " where   Codigo= @Codigo and Legajo= @Legajo"

                        dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Codigo", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Codigo").Value = pCodigo

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Legajo").Value = pLegajo

                        dbConexion.dbcommand.CommandType = CommandType.Text
                        MsgAporte = "El Aporte no Existe."
                End Select

                dbConexion.dbdataadapter = New SqlClient.SqlDataAdapter(dbConexion.dbcommand)
                dbConexion.dbdataset = New DataSet
                dbConexion.dbdataadapter.Fill(dbConexion.dbdataset, "Aportes")

                If dbConexion.dbdataset.Tables.Count > 0 Then
                    If dbConexion.dbdataset.Tables("Aportes").Rows.Count > 0 Then
                        Existe = True
                        MsgAporte = "El Aporte Existe."
                    End If
                    dbAporDataSet = dbConexion.dbdataset.Copy()
                    dbConexion.dbdataadapter.Dispose()
                    dbConexion.dbdataset.Dispose()
                    dbConexion.dbcommand.Dispose()
                    dbConexion.su_cerrar()
                Else
                    MsgAporte = "El Aporte no Existe."
                    Existe = False
                End If
            End If
            Return (Existe)
        Catch ex As Exception
            MsgAporte = "Error al buscar si existe el Aporte." & vbCrLf & ex.Message
            Return (False)
        End Try

    End Function
End Class
